La pandemia por COVID-19 ha tenido un impacto significativo en la salud pública a nivel mundial. El análisis de datos epidemiológicos permite comprender mejor las características de los casos y los factores asociados a la gravedad de la enfermedad.
Este informe presenta un análisis descriptivo de los casos sospechosos y confirmados de COVID-19 en México durante el año 2021, utilizando una muestra de datos oficiales del sistema de vigilancia epidemiológica. Entender estos patrones es crucial para mejorar la respuesta ante futuras emergencias sanitarias.
1.2 Planificación
A continuación se presenta el cronograma de actividades realizado para este proyecto:
Mostrar / ocultar código
gantt title Planificación del Proyecto dateFormat YYYY-MM-DD axisFormat %d/%m todayMarker off section Investigación y Diseño Definición del tema de investigación :a1, 2026-01-05, 7d Definición de variables relevantes :a2, 2026-01-12, 10d Creación de la herramienta de recolección :a3, 2026-01-22, 10d section Análisis de Datos Análisis descriptivo de los datos :b1, 2026-02-01, 9d Análisis de interacción :b2, 2026-02-10, 11d section Redacción Redacción de resultados e informe final :d1, 2026-02-21, 9d
gantt
title Planificación del Proyecto
dateFormat YYYY-MM-DD
axisFormat %d/%m
todayMarker off
section Investigación y Diseño
Definición del tema de investigación :a1, 2026-01-05, 7d
Definición de variables relevantes :a2, 2026-01-12, 10d
Creación de la herramienta de recolección :a3, 2026-01-22, 10d
section Análisis de Datos
Análisis descriptivo de los datos :b1, 2026-02-01, 9d
Análisis de interacción :b2, 2026-02-10, 11d
section Redacción
Redacción de resultados e informe final :d1, 2026-02-21, 9d
1.3 Objetivos
1.3.1 Objetivo General
Analizar los casos sospechosos y confirmados de COVID-19 en México durante el año 2021, describiendo sus principales características demográficas y clínicas.
1.3.2 Objetivos Específicos
Describir la distribución del score de riesgo COVID y del índice de gravedad en los casos sospechosos y confirmados de COVID-19 en México durante el año 2021.
Analizar la asociación entre el Nivel de Riesgo Clínico y el Índice de Gravedad del desenlace.
Comparar la distribución de los casos según sexo y clasificación final en los casos sospechosos y confirmados.
2 Datos
2.1 Población objetivo
La población está conformada por todos los registros acumulados en el Sistema de Vigilancia Epidemiológica de Enfermedades Respiratorias Viral correspondientes a casos sospechosos y confirmados de COVID-19 en México durante el año 2021. La unidad muestral es el individuo (paciente).
2.2 Tipo de muestreo
Se empleó un muestreo no probabilístico por conveniencia. Al tratarse de un análisis de datos secundarios, se trabajó con la totalidad de observaciones accesibles y validadas en el archivo fuente proporcionado.
2.3 Recolección de datos
La recolección se basó en la descarga y procesamiento de la base de datos abierta del gobierno de México. No se utilizaron instrumentos de recolección primaria (encuestas), sino que se procesó el archivo muestra_covid_500M_NA.csv.
2.4 Variables
A continuación se definen las variables seleccionadas y su clasificación:
#
Variable
Tipo Estadístico
Origen / Descripción
1
SCORE_RIESGO_COVID
Cuantitativa continua
Derivada: Índice continuo basado en la carga de comorbilidades y la certeza diagnóstica (Rango 0-3). Resume el nivel relativo de riesgo del paciente.
2
INDICE_GRAVEDAD
Cuantitativa continua
Derivada: Índice ponderado de complicaciones (neumonía, UCI, intubación) y defunción. Mide la severidad clínica del caso (Rango 0-1).
3
N_COMORBILIDADES
Cuantitativa discreta
Derivada: Suma simple de 10 comorbilidades crónicas (Diabetes, EPOC, Asma, etc.). Valor entero de 0 a 10.
4
N_COMPLICACIONES_GRAVES
Cuantitativa discreta
Derivada: Suma de eventos graves: NEUMONIA + INTUBADO + UCI. Indica severidad aguda (0 a 3).
5
EDAD
Cuantitativa discreta
Original: Edad del paciente en años completos.
6
DIAS_RETRASO
Cuantitativa discreta
Derivada: Diferencia en días entre FECHA_INGRESO y FECHA_SINTOMAS. Indica la demora en buscar atención médica.
7
SEXO
Cualitativa nominal
Original: Sexo del paciente (1: Mujer / 2: Hombre).
8
ENTIDAD_RES
Cualitativa nominal
Original: Entidad federativa de residencia (Códigos 1-32).
9
ESTADO
Cualitativa nominal
Derivada: Clasificación del desenlace final basada en si existe fecha de defunción (Vivo / Muerto).
10
RIESGO_CLINICO
Cualitativa ordinal
Derivada: Categorización del nº de comorbilidades en niveles jerárquicos: Muy bajo (0), Bajo (1-2), Moderado (3-4), Alto (5-6), Muy alto (7-8), Crítico (9-10).
11
CLASIFICACION_FINAL
Cualitativa ordinal
Original: Nivel de confirmación del caso (1-7), donde los valores más bajos indican mayor certeza diagnóstica (confirmado por lab, asociación, etc.).
2.5 Limpieza
En esta sección se detalla la política de manejo de datos faltantes y la creación de variables derivadas.
2.5.1 Carga y Preprocesamiento
Mostrar / ocultar código
if (!require("pacman")) install.packages("pacman")pacman::p_load(dplyr, ggplot2, lubridate, knitr, tidyr, scales, e1071, kableExtra)
A continuación, se cuantifican los valores perdidos y se aplica el filtro para obtener la muestra final (“DATOS_FINALES”), asegurando la calidad de la información analizada.
Mostrar / ocultar código
# 1. Selección de columnas de interéscols_analisis <-c("EDAD", "SEXO", "DIAS_RETRASO", "ENTIDAD_RES", "N_COMORBILIDADES", "SCORE_RIESGO_COVID", "INDICE_GRAVEDAD", "N_COMPLICACIONES_GRAVES", "RIESGO_CLINICO", "CLASIFICACION_FINAL")# 2. Diagnóstico previo (Conteo de NAs)nas_por_columna <-colSums(is.na(DATOS_TRANSFORMADOS[cols_analisis]))pct_nas <-round((nas_por_columna /nrow(DATOS_TRANSFORMADOS)) *100, 2)# Tabla de diagnósticodata.frame(Variable =names(nas_por_columna),NAs_Cantidad = nas_por_columna,NAs_Porcentaje =paste0(pct_nas, "%")) |>kbl(caption ="Conteo de valores perdidos por variable antes del filtrado") |>kable_styling(bootstrap_options ="striped", full_width = F)
Conteo de valores perdidos por variable antes del filtrado
Variable
NAs_Cantidad
NAs_Porcentaje
EDAD
EDAD
2429
0.49%
SEXO
SEXO
200
0.04%
DIAS_RETRASO
DIAS_RETRASO
401
0.08%
ENTIDAD_RES
ENTIDAD_RES
200
0.04%
N_COMORBILIDADES
N_COMORBILIDADES
0
0%
SCORE_RIESGO_COVID
SCORE_RIESGO_COVID
0
0%
INDICE_GRAVEDAD
INDICE_GRAVEDAD
468238
93.65%
N_COMPLICACIONES_GRAVES
N_COMPLICACIONES_GRAVES
599
0.12%
RIESGO_CLINICO
RIESGO_CLINICO
0
0%
CLASIFICACION_FINAL
CLASIFICACION_FINAL
342317
68.46%
Mostrar / ocultar código
# 3. Ejecución del Filtradon_antes <-nrow(DATOS_TRANSFORMADOS)DATOS_FINALES <- DATOS_TRANSFORMADOS |>filter(complete.cases(across(all_of(cols_analisis))))n_despues <-nrow(DATOS_FINALES)# 4. Tabla de Balance de Limpiezadata.frame(Fase =c("Total Registros Iniciales", "Registros Eliminados (Incompletos)", "Muestra Final Analizable"),Cantidad =c(format(n_antes, big.mark=","), format(n_antes - n_despues, big.mark=","), format(n_despues, big.mark=",")),Porcentaje =c("100%", paste0(round((n_antes - n_despues)/n_antes*100, 2), "%"), paste0(round(n_despues/n_antes*100, 2), "%"))) |>kbl(caption ="Resumen del impacto de la limpieza de datos") |>kable_styling(bootstrap_options ="hover", full_width = F)
Resumen del impacto de la limpieza de datos
Fase
Cantidad
Porcentaje
Total Registros Iniciales
500,000
100%
Registros Eliminados (Incompletos)
482,096
96.42%
Muestra Final Analizable
17,904
3.58%
3 Análisis Descriptivo
En esta sección se describen las variables principales del estudio mediante estadísticos de posición (media, mediana), dispersión (desviación estándar) y gráficos exploratorios.
3.1 Análisis Univariado
3.1.1 Variable Cuantitativa: Score de Riesgo COVID
Analizamos la distribución del riesgo acumulado en la población.
Tabla 1 Estadísticos descriptivos: Distribución del score de Riesgo COVID
Figura 1 Distribución del score de riesgo COVID en la población estudiada
Mostrar / ocultar código
# Histogramaggplot(DATOS_FINALES, aes(x = SCORE_RIESGO_COVID)) +geom_histogram(bins =30, fill ="#2C3E50", color ="white", alpha =0.8) +geom_vline(aes(xintercept =mean(SCORE_RIESGO_COVID)), color ="red", linetype ="dashed", size =1) +labs(x ="Score de Riesgo (0-3)",y ="Frecuencia" ) +theme_minimal()
Nota. La línea roja vertical discontinua representa el valor promedio del score de riesgo COVID.
Interpretación: La mayoría de los casos presentan un score de riesgo bajo a moderado (concentración a la izquierda). La asimetría positiva sugiere que los pacientes con múltiples factores de riesgo y certeza diagnóstica alta son menos frecuentes pero representan el grupo crítico.
Interpretación: El diagrama de caja muestra que la mediana del índice de gravedad es muy baja (cercana a 0), lo que indica que una gran proporción de la muestra no desarrolló complicaciones graves (UCI, intubación). Los valores atípicos (puntos superiores) corresponden a los casos severos y defunciones.
# Gráfico de barrasggplot(tabla_sexo, aes(x = Etiqueta, y = Frecuencia, fill = Etiqueta)) +geom_col(show.legend =FALSE) +geom_text(aes(label =paste0(round(Porcentaje, 1), "%")), vjust =-0.5) +scale_fill_manual(values =c("steelblue", "lightpink")) +labs(x ="", y ="Cantidad de Casos" ) +theme_classic()
Interpretación: Se observa una distribución equilibrada entre hombres y mujeres en la muestra analizada.
4 Analisis De Interaccion
4.1 Variables Categóricas: SEXO vs ESTADO
Tabla 3 Distribución de casos por Sexo y Estado
Mostrar / ocultar código
# Crear tabla de contingenciatabla_categorica <-table(DATOS_FINALES$SEXO, DATOS_FINALES$ESTADO)colnames(tabla_categorica) <-c("Vivo", "Muerto")rownames(tabla_categorica) <-c("Mujer", "Hombre")# Mostrar tabla con kablekbl(tabla_categorica, caption ="Frecuencias absolutas: Sexo vs Estado",align ='c') |>kable_styling(bootstrap_options ="striped", full_width =FALSE)
Frecuencias absolutas: Sexo vs Estado
Vivo
Muerto
Mujer
3296
4352
Hombre
4944
5312
Tabla 4 Porcentajes por Sexo
Mostrar / ocultar código
# Calcular porcentajes por filaprop_tabla <-prop.table(tabla_categorica, 1) *100kbl(round(prop_tabla, 1), caption ="Porcentajes por fila (%)",align ='c') |>kable_styling(bootstrap_options ="striped", full_width =FALSE)
Porcentajes por fila (%)
Vivo
Muerto
Mujer
43.1
56.9
Hombre
48.2
51.8
Figura 4 Distribución del Estado por Sexo
Mostrar / ocultar código
# Gráfico de barras agrupadas barplot(tabla_categorica,beside =TRUE,col =c("lightblue", "pink"),main ="Distribución del Estado por Sexo",xlab ="Estado",ylab ="Número de casos",legend.text =rownames(tabla_categorica),args.legend =list(x ="topright", title ="Sexo", cex =0.8))
Figura 5 Distribución del Estado según Sexo Frecuencia absoluta de casos
Mostrar / ocultar código
# Gráfico de barras agrupadas con ggplot2ggplot(DATOS_FINALES, aes(x =factor(SEXO, labels =c("Mujer", "Hombre")), fill = ESTADO)) +geom_bar(position ="dodge", color ="black", alpha =0.8) +geom_text(stat ='count', aes(label = ..count..), position =position_dodge(width =0.9), vjust =-0.5, size =3) +scale_fill_manual(values =c("Muerto"="#E74C3C", "Vivo"="#2ECC71")) +scale_y_continuous(expand =expansion(mult =c(0, 0.15))) +labs(x ="Sexo del paciente",y ="Número de casos (Frecuencia)",fill ="Estado Final" ) +theme_minimal() +theme(legend.position ="top")
Interpretación: La tabla de contingencia y el gráfico de barras muestran la distribución del estado (vivo o fallecido) según el sexo. Se observa que tanto en mujeres (aproximadamente “, round(prop_tabla[1,1], 1),”% vivos) como en hombres (aproximadamente “, round(prop_tabla[2,1], 1),”% vivos), la gran mayoría de los casos corresponden a personas vivas. Al comparar porcentajes por sexo, se evidencian diferencias mínimas en la proporción de fallecidos (mujeres: “, round(prop_tabla[1,2], 1),”%, hombres: “, round(prop_tabla[2,2], 1),”%). El gráfico refuerza visualmente esta similitud entre sexos. En conjunto, los resultados sugieren que el sexo no parece estar fuertemente asociado al estado final del paciente en esta muestra.”
4.2 Variables Numéricas: EDAD vs DIAS_RETRASO
Tabla 6 Estadísticas descriptivas y correlación entre variables numéricas
Mostrar / ocultar código
# Calcular correlación PRIMEROcor_edad_retraso <-cor(DATOS_FINALES$EDAD, DATOS_FINALES$DIAS_RETRASO, use ="complete.obs")# Tabla con estadísticas de AMBAS variables y su relaciónresumen_numericas <-data.frame(" "=c("EDAD (años)", "DIAS_RETRASO (días)", "CORRELACIÓN"),"Media"=c(round(mean(DATOS_FINALES$EDAD, na.rm =TRUE), 1),round(mean(DATOS_FINALES$DIAS_RETRASO, na.rm =TRUE), 1),paste("r =", round(cor_edad_retraso, 3)) ),"DE"=c(round(sd(DATOS_FINALES$EDAD, na.rm =TRUE), 1),round(sd(DATOS_FINALES$DIAS_RETRASO, na.rm =TRUE), 1),"" ),"Mínimo"=c(min(DATOS_FINALES$EDAD, na.rm =TRUE),min(DATOS_FINALES$DIAS_RETRASO, na.rm =TRUE),"" ),"Máximo"=c(max(DATOS_FINALES$EDAD, na.rm =TRUE),max(DATOS_FINALES$DIAS_RETRASO, na.rm =TRUE),"" ))kbl(resumen_numericas, caption ="Análisis de la relación Edad vs Días de Retraso",col.names =c("Variable", "Media", "Desv. Estándar", "Mín", "Máx")) |>kable_styling(bootstrap_options ="striped", full_width =FALSE)
Análisis de la relación Edad vs Días de Retraso
Variable
Media
Desv. Estándar
Mín
Máx
EDAD (años)
56.9
18
1
100
DIAS_RETRASO (días)
5.7
4.1
0
45
CORRELACIÓN
r = 0.045
Figura 6 Edad vs Días de Retraso
Mostrar / ocultar código
# Gráfico básico de dispersiónplot(DATOS_FINALES$EDAD, DATOS_FINALES$DIAS_RETRASO, pch =20, col ="blue", main =paste("Edad vs Días de Retraso\nr =", round(cor_edad_retraso, 3)),xlab ="Edad (años)",ylab ="Días de retraso(ingreso - síntomas)")
Mostrar / ocultar código
# Calcular correlación para incluir en el títulocor_edad_retraso <-cor(DATOS_FINALES$EDAD, DATOS_FINALES$DIAS_RETRASO, use ="complete.obs")
Coeficiente de correlacion:
Mostrar / ocultar código
round(cor_edad_retraso, 3)
[1] 0.045
Figura 7
Densidad: Edad vs Días de Retraso
Mostrar / ocultar código
smoothScatter(DATOS_FINALES$EDAD, DATOS_FINALES$DIAS_RETRASO,pch =20,col ="red",main ="Densidad: Edad vs Días de Retraso",xlab ="Edad (años)",ylab ="Días de retraso")
Interpretación: El gráfico de dispersión muestra la relación entre la edad de los pacientes y los días de retraso entre la aparición de síntomas y el ingreso. Los puntos se encuentran dispersos sin formar un patrón claramente definido, lo que sugiere que la relación entre ambas variables es muy débil. El coeficiente de correlación obtenido (r = “, round(cor_edad_retraso, 3),”) confirma una asociación prácticamente nula entre la edad y los días de retraso, por lo que no se observa una relación lineal. Esto implica que la edad del paciente no parece ser un factor determinante en el tiempo de retraso para el ingreso. El gráfico de densidad (smoothScatter) muestra una concentración de casos entre 0-10 días de retraso para todas las edades, pero sin una tendencia clara que indique dependencia entre ambas variables.”
4.3 Variables Categórica Y Numérica: RIESGO_CLINICO vs INDICE_GRAVEDAD
Tabla 7 Estadísticos del Índice de Gravedad por Nivel de Riesgo
Mostrar / ocultar código
# Resumen estadístico por grupo (igual que antes)resumen_riesgo <- DATOS_FINALES |>group_by(RIESGO_CLINICO) |>summarise(n =n(),Media =round(mean(INDICE_GRAVEDAD), 3),Mediana =round(median(INDICE_GRAVEDAD), 3),DE =round(sd(INDICE_GRAVEDAD), 3),Min =round(min(INDICE_GRAVEDAD), 3),Max =round(max(INDICE_GRAVEDAD), 3) )kbl(resumen_riesgo, caption ="Resumen por grupo de riesgo",align =c('l', rep('r', 6))) |>kable_styling(bootstrap_options ="striped", full_width =FALSE)
Resumen por grupo de riesgo
RIESGO_CLINICO
n
Media
Mediana
DE
Min
Max
Muy bajo (0)
7024
0.246
0.1
0.261
0
1.0
Bajo (1-2)
8618
0.315
0.4
0.271
0
1.0
Moderado (3-4)
2123
0.338
0.4
0.267
0
1.0
Alto (5-6)
134
0.343
0.4
0.278
0
1.0
Muy alto (7-8)
4
0.125
0.0
0.250
0
0.5
Crítico (9-10)
1
0.000
0.0
NA
0
0.0
Figura 8 Distribución del Índice de Gravedad por Nivel de Riesgo
Mostrar / ocultar código
# Boxplot por categoría - USANDO TU ESTILO (base R)boxplot(INDICE_GRAVEDAD ~ RIESGO_CLINICO, data = DATOS_FINALES,col =heat.colors(6, alpha =0.7),main ="Índice de Gravedad por Nivel de Riesgo Clínico",xlab ="Nivel de Riesgo Clínico",ylab ="Índice de Gravedad (0-1)",las =2, # Etiquetas verticales en eje Xcex.axis =0.8)# Agregar puntos de las mediasmeans <-tapply(DATOS_FINALES$INDICE_GRAVEDAD, DATOS_FINALES$RIESGO_CLINICO, mean)points(1:length(means), means, pch =23, col ="red", bg ="yellow", cex =1.5)
Interpretación: El análisis descriptivo del índice de gravedad según el nivel de riesgo clínico muestra diferencias entre los grupos. A medida que aumenta el nivel de riesgo clínico, se observa un incremento en la media del índice de gravedad (desde 0.246 en ‘Muy bajo’ hasta 0.343 en ‘Alto’). El boxplot evidencia que los grupos de mayor riesgo presentan valores más altos del índice de gravedad, aunque con amplia dispersión, mientras que los grupos de menor riesgo muestran valores más bajos. La ubicación de las medias (diamantes amarillos) refuerza esta tendencia ascendente. En conjunto, estos resultados indican que el nivel de riesgo clínico está asociado con la gravedad del cuadro, lo cual es coherente desde el punto de vista clínico: pacientes con más comorbilidades tienden a presentar desenlaces más graves.”
5 Discusión de Resultados
Los análisis realizados permiten responder a los objetivos planteados:
Objetivo 1 - Distribución del riesgo y gravedad: Se encontró que el Score de Riesgo COVID presenta una distribución asimétrica positiva, con la mayoría de los casos concentrados en valores bajos (0-0.8). Esto sugiere que la población estudiada tenía, en general, una carga de comorbilidades moderada. El Índice de Gravedad mostró una distribución aún más sesgada, con más del 75% de los casos presentando valores de 0 a 0.1, indicando que la mayoría de los pacientes no desarrolló complicaciones graves. Sin embargo, la presencia de outliers en valores cercanos a 1 señala la existencia de casos críticos que requirieron UCI, intubación o culminaron en defunción.
Objetivo 2 - Riesgo Clínico como predictor: La relación entre el Nivel de Riesgo Clínico (basado en comorbilidades) y el Índice de Gravedad mostró una tendencia positiva pero con variabilidad significativa. Mientras los grupos de riesgo “Bajo” y “Moderado” presentaron índices de gravedad consistentemente bajos, el grupo “Crítico” mostró una dispersión amplia. Esto sugiere que, aunque las comorbilidades son un factor de riesgo importante, no son determinantes absolutos del desenlace. Factores como la atención médica oportuna, la edad y posiblemente la variante viral podrían moderar esta relación.
Objetivo 3 - Distribución por sexo y clasificación: No se encontraron diferencias marcadas en la distribución por sexo, manteniéndose una proporción cercana al 50% para cada categoría de clasificación final. Esto indica ausencia de sesgos de género en el registro y clasificación de casos. La categoría más frecuente fue la clasificación 3, que podría corresponder a “caso confirmado por asociación clínico-epidemiológica” según la normativa mexicana.
Limitaciones: El estudio presenta limitaciones propias de los datos secundarios, incluyendo posible subregistro de casos leves, variabilidad en la calidad del registro entre entidades federativas, y la imposibilidad de establecer relaciones causales debido al diseño observacional.
6 Conclusiones
Perfil de riesgo predominante: La mayor parte de los casos de COVID-19 en México durante el año 2021 fueron de pacientes con riesgo clínico bajo a moderado y una evolución clínica mayormente leve, sin presentar complicaciones graves. Esto se observa en la distribución asimétrica positiva del Score de Riesgo COVID, con una gran concentración de valores bajos, lo que indica una carga de comorbilidades generalmente moderada en la población estudiada.
Valor predictivo limitado del riesgo basal: Aunque se encontró una relación positiva entre la cantidad de comorbilidades y la severidad del desenlace clínico, esta conexión no fue determinista. Los pacientes catalogados en niveles de riesgo clínico altos mostraron una notable variabilidad en el Índice de Severidad, lo que sugiere que el riesgo inicial, por sí solo, no predice de forma absoluta la gravedad del cuadro clínico, y que otros factores clínicos y contextuales pueden tener un impacto considerable en el resultado.
Equidad en el sistema de vigilancia: La distribución equitativa de los casos por sexo en todas las categorías de clasificación final indica que el sistema de vigilancia epidemiológica funcionó sin sesgos de género evidentes en el registro y clasificación de los casos de COVID-19 durante el periodo analizado.
Implicaciones para salud pública: Los hallazgos subrayan la relevancia de conservar sistemas de vigilancia epidemiológica completos que detecten tanto los casos severos como los leves. Igualmente, muestran que los pacientes con diversas comorbilidades, a pesar de tener un mayor riesgo clínico, pueden experimentar una evolución positiva si reciben atención médica oportuna y adecuada.
Independencia del tiempo de respuesta: La falta de una correlación relevante entre la edad y los días de demora en el acceso a los servicios de salud indica que los tiempos de respuesta del sistema sanitario fueron parecidos entre los diversos grupos etarios, sin mostrar una relación lineal entre ambas variables a lo largo del periodo de estudio.